package com.doit.day06

object _11_逆变协变不变 {
  def main(args: Array[String]): Unit = {

    //不变
    class Box2[T](t:T)
    class Pencil2
    class YZPencil2 extends Pencil2

    val value: Box2[Pencil2] = new Box2[Pencil2](new Pencil2)

    //协变
    class Box1[+T](t:T)
    class Pencil1
    class YZPencil1 extends Pencil1

    val value2 :Box1[Pencil1] = new Box1[YZPencil1](new YZPencil1)

    //逆变
    class Box[-T](t:T)
    class Pencil
    class YZPencil extends Pencil
    val value3 :Box[YZPencil] = new Box[Pencil](new Pencil)




  }

  //不变  ==》 子和父确实有父子继承关系  但是装父的盒子和装笔的盒子没有任何继承关系  T


  //协变   ==》 子和父确实有父子继承关系  但是装父的盒子是装笔的盒子的父类  +T


  //逆变   ==》 子和父确实有父子继承关系  但是装子的盒子是装父的盒子的父类 -T


}
